package com.itheima.d7_sync.no1;

public class MyRunnable implements Runnable {
    //持有的账号
    Account account;
    //要取出的钱
    int money;

    public MyRunnable(Account account, int money) {
        this.account = account;
        this.money = money;
    }

    @Override
    public void run() {
        //1.找到操作/修改共享资源的代码

        //2.使用同步代码块，把代码放进去
        //同步锁对象要求：理论上任何一个对象都可以是锁对象！但是多个线程面临的锁对象必须是同一个！
        //synchronized (new Object()) {

        //实例方法中，也可以使用this作为锁对象。但是并不保险，一定要注意this是否是同一个对象
        //synchronized (this) {

        //对于静态方法，建议使用 类名.class 字节码对象作为锁对象
        //synchronized (MyRunnable.class) {

        //注意：建议使用共享资源作为锁对象，本需求中Account账号对象是共享资源
        synchronized (account) {
            if (money <= account.getBalance()) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                account.setBalance(account.getBalance() - money);
                System.out.println(Thread.currentThread().getName() + "取出" + money);
            } else {
                System.out.println(Thread.currentThread().getName() + "取钱时，余额不足");
            }
        }

        System.out.println("剩余：" + account.getBalance());
    }
}
